/**
 * elancom Corporation copy right 2012 - 2015  
 *   
 * $Header: https://192.168.1.224/svn/elancom/product/elancom-platform/trunk/src/main/java/com/elancom/framework/dao/CriteriaLogic.java 1034 2012-07-02 03:09:12Z lanzhouxue $
 * $Id: CriteriaLogic.java 1034 2012-07-02 03:09:12Z lanzhouxue $
 * $Author: lanzhouxue $
 * $Date: 2012-07-02 11:09:12 +0800 (周一, 02 七月 2012) $
 * $Revision: 1034 $
 */
package com.elancom.framework.dao;

import com.elancom.framework.dao.enums.MatchMode;
import com.elancom.framework.dao.expression.Condition;

/**
 * @author elancom
 * @date Apr 13, 2012
 */
public interface CriteriaLogic<R> {
	CriteriaLogic<R> and(Condition... conditions);

	CriteriaLogic<R> between(String propertyName, Object left, Object right);

	CriteriaLogic<R> eq(String propertyName, Object value);

	CriteriaLogic<R> eq(String propertyName, Object value, boolean isTargetProperty);

	CriteriaLogic<R> ge(String propertyName, Object value);

	CriteriaLogic<R> gt(String propertyName, Object value);

	CriteriaLogic<R> in(String propertyName, Object values);

	CriteriaLogic<R> isEmpty(String property);

	CriteriaLogic<R> isNotEmpty(String property);

	CriteriaLogic<R> isNotNull(String property);

	CriteriaLogic<R> isNull(String property);

	CriteriaLogic<R> le(String propertyName, Object value);

	CriteriaLogic<R> like(String propertyName, Object value);

	CriteriaLogic<R> like(String propertyName, Object value, MatchMode mode);

	CriteriaLogic<R> lt(String propertyName, Object value);

	CriteriaLogic<R> not(Condition condition);

	CriteriaLogic<R> or(Condition... confConditiones);

	Condition pop();

	CriteriaLogic<R> sizeEq(String property, int size);

	CriteriaLogic<R> sizeGe(String property, int size);

	CriteriaLogic<R> sizeGt(String property, int size);

	CriteriaLogic<R> sizeLe(String property, int size);

	CriteriaLogic<R> sizeLt(String property, int size);

	CriteriaLogic<R> sizeNe(String property, int size);
}
